package com.atguigu.tingshu.order.api;

import com.alibaba.fastjson2.JSONObject;
import com.atguigu.tingshu.common.login.GuiguLogin;
import com.atguigu.tingshu.common.result.Result;
import com.atguigu.tingshu.model.order.OrderInfo;
import com.atguigu.tingshu.order.service.OrderInfoService;
import com.atguigu.tingshu.vo.order.OrderInfoVo;
import com.atguigu.tingshu.vo.order.TradeVo;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@Tag(name = "订单管理")
@RestController
@RequestMapping("api/order/orderInfo")
@SuppressWarnings({"unchecked", "rawtypes"})
public class OrderInfoApiController {

    @Autowired
    private OrderInfoService orderInfoService;

    // 1. 订单购买 生成订单接口
    // 1. 三种情况  开通/续费会员    购买专辑   购买声音(批量)
    // http://127.0.0.1:8500/api/order/orderInfo/trade
    @GuiguLogin
    @Operation(summary = "订单购买,生成订单详情")
    @PostMapping("trade")
    public Result trade(@RequestBody TradeVo tradeVo) {

        // 前端提交的参数为 TradeVo
        // 需要响应给前端的数据为 OrderInfoVo
        OrderInfoVo orderInfoVo = orderInfoService.trade(tradeVo);
        return Result.ok(orderInfoVo);
    }

    // 提交订单
    // http://127.0.0.1:8500/api/order/orderInfo/submitOrder
    @GuiguLogin
    @Operation(summary = "提交订单")
    @PostMapping("submitOrder")
    public Result submitOrder(@RequestBody OrderInfoVo orderInfoVo) {

        // 前端提交的参数为 OrderInfoVo
        // 需要响应给前端的数据为 map(订单号)/JsonObject(订单号)
        // 提交订单 并且返回订单号
        String orderNo = orderInfoService.submitOrder(orderInfoVo);
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("orderNo", orderNo);
        return Result.ok(jsonObject);
    }

    // 支付成功查看订单详情
    // http://127.0.0.1:8500/api/order/orderInfo/getOrderInfo/1913536617629593600
    @GuiguLogin
    @Operation(summary = "支付成功查看订单详情")
    @GetMapping("getOrderInfo/{orderNo}")
    public Result getOrderInfo(@PathVariable String orderNo) {

        // 订单号
        // 需要响应给前端的数据为 TradeResponeVo
        OrderInfo orderInfo = orderInfoService.getOrderInfo(orderNo);
        return Result.ok(orderInfo);
    }

    // 分页查询用户订单
    // http://127.0.0.1:8500/api/order/orderInfo/findUserPage/1/10
    @GuiguLogin
    @Operation(summary = "分页查询用户订单")
    @GetMapping("findUserPage/{pageNum}/{pageSize}")
    public Result<Page<OrderInfo>> findUserPage(
            @PathVariable Long pageNum,
            @PathVariable Long pageSize) {
        // todo 分页查询用户订单
        // 查询订单的基本信息 和 订单的明细列表 以及减免列表
        Page<OrderInfo> page = orderInfoService.findUserOrderPage(pageNum, pageSize);

        // 分页查询用户订单
        // 需要响应给前端的数据为 OrderInfo
        return Result.ok(page);
    }

}

